package player;

import adventure.commands.skills.Skill;
import adventure.placeable.Fightable;
import adventure.placeable.Item;
import adventure.placeable.Mobile;

/**
 *
 * @author Michael Hanns
 *
 */
public interface Player {

    public int x();

    public int y();

    public int z();
    
    public boolean isAdmin();
    
    public boolean isSuperAdmin();

    public int getID();

    public String getName();

    public String getVocationName();

    public String getAliveName();

    public String getHealthStatus();

    public String getDescription();

    public String getAliveDescription();

    public String getInventoryPrompt();
    
    public String getSkillsPrompt();

    public String[] getItemDescription(String item);

    public Item[] getAllItems();

    public String getStatusTable();

    public String getStatusPrompt();

    public int getLevel();

    public int getAttack();

    public int getDefence();

    public int getIntelligence();

    public int getSpeed();

    public int getLuck();

    public int getHealth();

    public int getMaxHealth();

    public int getSpecial();

    public int getMaxSpecial();

    public int getWeaponMod();

    public int getOffhandMod();

    public int getHelmMod();

    public int getChestMod();

    public int getBootsMod();
    
    public String decayTempItems();

    public boolean isDead();

    public boolean recordingSpeedwalk();

    public String getSpeedwalk();

    public void addToSpeedwalk(char dir);

    public void recordSpeedwalk(boolean val);

    public void clearSpeedwalk();

    public void move(char dir);

    public boolean hasItem(int id, int quantity);    
    
    public boolean hasItemUses(int id, int quantity);

    public int getCurrencyAmount();

    public boolean hasCurrencyAmount(int val);

    public void modifyCurrencyAmount(int val);

    public Item getKey(int x, int y, int z, char dir);

    public String gainXP(int xp, boolean bonus);

    public void giveCurrencyAmount(int gold);

    public void giveItem(Item i);

    public boolean useItem(int id);

    public String equip(String object);

    public String remove(String object);
    
    public Item getInventoryItem(String item);
    
    public Item getInventoryItem(int position);

    public void removeInventoryItem(String item);

    public boolean inCombat();

    public boolean pvpImmune();

    public boolean attack(Fightable target);

    public int takeCurrency(int quant);

    public int takeCurrency();

    public void stopFighting(Fightable target);

    public void stopFighting();

    /*public Player[] getLocalPlayerTargets();

    public Mobile[] getLocalMobileTargets();*/
    
    public Fightable[] getLocalTargets();

    public String consider(Fightable target);

    public String consume(String item);

    public String compare(String item);

    public boolean updateSpawn(int level);

    public void respawn();

    public void recall();

    public void tickRegen();

    public void setSuppressTick(boolean val);

    public boolean suppressTick();

    public boolean lightSourceEquipped();

    public boolean subscribesTo(String channel);

    public String subscribeTo(String channel);

    public boolean hasLogEntry(int id);

    public void newLogEntry(BookEntry e);

    public boolean hasIncompleteLogEntry(int id);

    public boolean completedLogEntry(int id);

    public void completeLogEntry(int id);

    public String viewLog(int page);

    public String viewCompleteLog(int page);

    public String viewLogEntry(int entry);

    public boolean loginCorrect(String name, String password);

    public char getLastMove();

    public boolean addToFollowers(Player p);

    public boolean removeFromFollowers(Player p);

    public boolean isFollowing(Player p);

    public Player[] playersFollowing();

    public Player[] getLocalFollowers();

    public boolean addToGroup(Player p);

    public boolean removeFromGroup(Player p);

    public Player[] playersInGroup();
    
    public Player[] getLocalGroup();
    
    public boolean isVocation(int id);
    
    public String performSkill(String[] command);
    
    public boolean knowsSkill(int id);
    
    public void learnSkill(Skill s);
    
    public void forgetSkill(Skill s);
    
    public String getSkillInfo(String skill);
}
